package model

// 通用响应结构
type Response struct {
	Code    int    `json:"code"`    // 状态码
	Message string `json:"message"` // 提示信息
	Data    any    `json:"data"`    // 数据
}

// 文件上传响应
type FileUploadResponse struct {
	Response
	FileInfo any `json:"file_info"` // 文件信息
}

// 状态码定义
const (
	// 成功状态码
	SUCCESS = 200

	// 客户端错误状态码 (4xx)
	ERROR_INVALID_REQUEST  = 400 // 无效的请求
	ERROR_UNAUTHORIZED     = 401 // 未授权
	ERROR_FORBIDDEN        = 403 // 禁止访问
	ERROR_NOT_FOUND        = 404 // 资源不存在
	ERROR_FILE_TOO_LARGE   = 413 // 文件太大
	ERROR_UNSUPPORTED_TYPE = 415 // 不支持的文件类型

	// 服务端错误状态码 (5xx)
	ERROR_INTERNAL        = 500 // 服务器内部错误
	ERROR_NOT_IMPLEMENTED = 501 // 未实现
	ERROR_STORAGE_FULL    = 507 // 存储空间不足
)

// 错误信息映射
var ErrorMessages = map[int]string{
	SUCCESS:                "操作成功",
	ERROR_INVALID_REQUEST:  "无效的请求参数",
	ERROR_UNAUTHORIZED:     "请先登录",
	ERROR_FORBIDDEN:        "无权限执行此操作",
	ERROR_NOT_FOUND:        "请求的资源不存在",
	ERROR_FILE_TOO_LARGE:   "文件大小超出限制",
	ERROR_UNSUPPORTED_TYPE: "不支持的文件类型",
	ERROR_INTERNAL:         "服务器内部错误",
	ERROR_NOT_IMPLEMENTED:  "接口未实现",
	ERROR_STORAGE_FULL:     "存储空间不足",
}

// 文件上传相关错误码
const (
	ERROR_FILE_EMPTY        = 4001 // 文件为空
	ERROR_FILE_UPLOAD       = 4002 // 文件上传失败
	ERROR_FILE_DELETE       = 4003 // 文件删除失败
	ERROR_FILE_DOWNLOAD     = 4004 // 文件下载失败
	ERROR_FILE_CORRUPTED    = 4005 // 文件已损坏
	ERROR_FILE_EXISTS       = 4006 // 文件已存在
	ERROR_FILE_NAME_INVALID = 4007 // 文件名无效
)

// 文件上传错误信息映射
var FileErrorMessages = map[int]string{
	ERROR_FILE_EMPTY:        "上传文件为空",
	ERROR_FILE_UPLOAD:       "文件上传失败",
	ERROR_FILE_DELETE:       "文件删除失败",
	ERROR_FILE_DOWNLOAD:     "文件下载失败",
	ERROR_FILE_CORRUPTED:    "文件已损坏",
	ERROR_FILE_EXISTS:       "文件已存在",
	ERROR_FILE_NAME_INVALID: "文件名包含非法字符",
}

// 图片相关错误码
const (
	ERROR_IMAGE_FORMAT     = 4101 // 图片格式错误
	ERROR_IMAGE_SIZE       = 4102 // 图片尺寸错误
	ERROR_IMAGE_CORRUPTED  = 4103 // 图片已损坏
	ERROR_IMAGE_PROCESSING = 4104 // 图片处理失败
)

// 图片错误信息映射
var ImageErrorMessages = map[int]string{
	ERROR_IMAGE_FORMAT:     "不支持的图片格式",
	ERROR_IMAGE_SIZE:       "图片尺寸不符合要求",
	ERROR_IMAGE_CORRUPTED:  "图片文件已损坏",
	ERROR_IMAGE_PROCESSING: "图片处理失败",
}

// 创建成功响应
func NewSuccessResponse(data any) Response {
	return Response{
		Code:    SUCCESS,
		Message: ErrorMessages[SUCCESS],
		Data:    data,
	}
}

// 创建错误响应
func NewErrorResponse(code int) Response {
	message, exists := ErrorMessages[code]
	if !exists {
		message = "未知错误"
	}
	return Response{
		Code:    code,
		Message: message,
		Data:    nil,
	}
}

// 创建文件上传成功响应
func NewFileUploadSuccessResponse(fileInfo any) FileUploadResponse {
	return FileUploadResponse{
		Response: Response{
			Code:    SUCCESS,
			Message: ErrorMessages[SUCCESS],
			Data:    nil,
		},
		FileInfo: fileInfo,
	}
}
